<?php
class Produtos {
  private $id_produto;
  private $nome;
  private $descricao;
  private $qtd_estoque;
  private $foto;
  private $id_categoria;
  private $vlr_produto;
  
  public function __construct($sFiltro = "", $sOrdem = "id_produto") {
    global $oDB;
    $sSQL = "SELECT id_produto, nome, descricao, qtd_estoque, foto, id_categoria, vlr_produto FROM produtos";
    if ($sFiltro) {
      $sSQL .= " WHERE ($sFiltro)";
    }
    if ($sOrdem) {
      $sSQL .= " ORDER BY $sOrdem";
    }
    if (!empty($sFiltro)) {
      $oRes = $oDB->Execute($sSQL);
      if ($oRes == false) {
        trigger_error($oDB->ErrorMsg());
      } else {
        $this->id_produto = $oRes->fields['id_produto'];
        $this->nome = $oRes->fields['nome'];
        $this->descricao = $oRes->fields['descricao'];
        $this->qtd_estoque = $oRes->fields['qtd_estoque'];
        $this->foto = $oRes->fields['foto'];
        $this->id_categoria = $oRes->fields['id_categoria'];
        $this->vlr_produto = $oRes->fields['vlr_produto'];
      }
    }
  }
  
  public function getId_produto() {
    return $this->id_produto;
  }
  public function setId_produto($valor) {
    $this->id_produto = $valor;
  }
  
  public function getNome() {
    return $this->nome;
  }
  public function setNome($valor) {
    $this->nome = $valor;
  }
  
  public function getDescricao() {
    return $this->descricao;
  }
  public function setDescricao($valor) {
    $this->descricao = $valor;
  }
  
  public function getQtd_estoque() {
    return $this->qtd_estoque;
  }
  public function setQtd_estoque($valor) {
    if ($valor < 0) {
      $valor = 0;
    }
    $this->qtd_estoque = $valor;
  }
  
  public function getFoto() {
    return $this->foto;
  }
  public function setFoto($valor) {
    global $oDB;

    if ($this->id_produto > 0 && empty($valor)) {
      $sql = 'SELECT foto FROM produtos WHERE id_produto = '. $this->id_produto;
      $oRes = $oDB->execute($sql = 'SELECT foto FROM produtos WHERE id_produto = '. $this->id_produto);
      $this->foto = $oRes->fields['foto'];
    } else {
      $this->foto = $valor;
    }
  }
  
  public function getId_categoria() {
    return $this->id_categoria;
  }
  public function setId_categoria($valor) {
    $this->id_categoria = $valor;
  }
  
  public function getVlr_produto() {
    return number_format($this->vlr_produto, 2, ',', '.');
  }
  public function setVlr_produto($valor) {
    $this->vlr_produto = str_replace(',', '.', $valor);
  }
  
  public function atualizar() {
    global $oDB;
    $campos = array(
      'nome' => $this->nome,
      'descricao' => $this->descricao,
      'qtd_estoque' => $this->qtd_estoque,
      'foto' => $this->foto,
      'id_categoria' => $this->id_categoria,
      'vlr_produto' => $this->vlr_produto,
    );

    if ($this->id_produto > 0) {
      return $oDB->AutoExecute('produtos', $campos, 'UPDATE', 'id_produto = '.intval($this->id_produto));
    } else {
      return $oDB->AutoExecute('produtos', $campos, 'INSERT');
    }
  }

  public function MaisVendidos() {
    global $oDB;

    $sSQL = 'SELECT nome, count(produtos_do_pedido.id_produto) as qtd_vendas FROM produtos
             INNER JOIN produtos_do_pedido ON (produtos.id_produto = produtos_do_pedido.id_produto)
             ORDER BY qtd_vendas DESC
             LIMIT 0,10';

    $oRes = $oDB->execute($sSQL);

    if ($oRes == false) {
      return $oDB->ErrorMsg();
    }

    return $oRes;
  }

  public function MenosVendidos() {
    global $oDB;

    $sSQL = 'SELECT nome, count(produtos_do_pedido.id_produto) as qtd_vendas FROM produtos
             INNER JOIN produtos_do_pedido ON (produtos.id_produto = produtos_do_pedido.id_produto)
             ORDER BY qtd_vendas ASC
             LIMIT 0,10';

    $oRes = $oDB->execute($sSQL);
    
    if ($oRes == false) {
      return $oDB->ErrorMsg();
    }

    return $oRes;
  }
  
  public function excluir($aIds) {
    global $oDB;
    $sIds = implode(',', $aIds);
    $sSQL = 'DELETE FROM produtos WHERE id_produto IN ('. $sIds .')';
    $oRes = $oDB->execute($sSQL);
    if ($oRes != false) {
      return true;
    }
  }
  
  public static function listar($filtro = "", $sOrdem = "id_produto") {
    global $oDB;
    $lista = array();
    $sSQL = "SELECT id_produto, nome, descricao, qtd_estoque, foto, id_categoria, vlr_produto FROM produtos";
    if ($filtro) {
      $sSQL .= " WHERE ($filtro)";
    }
    if ($sOrdem) {
      $sSQL .= " ORDER BY $sOrdem";
    }
    $oRes = $oDB->Execute($sSQL);
    if ($oRes == false) {
      trigger_error($oDB->ErrorMsg());
    } else {
      while (!$oRes->EOF) {
        $linha = new self();
        $linha->id_produto = $oRes->fields['id_produto'];
        $linha->nome = $oRes->fields['nome'];
        $linha->descricao = $oRes->fields['descricao'];
        $linha->qtd_estoque = $oRes->fields['qtd_estoque'];
        $linha->foto = $oRes->fields['foto'];
        $linha->id_categoria = $oRes->fields['id_categoria'];
        $linha->vlr_produto = $oRes->fields['vlr_produto'];
        $lista[] = $linha;
        
        $oRes->MoveNext();
      }
    }
    return $lista;
  }
  
}
?>
